#!/bin/sh

add_chain() {
  /sbin/iptables -N $1 2> /dev/null
  /sbin/iptables -A in_mod -j $1 2> /dev/null
  /sbin/iptables -t nat -N $1 2> /dev/null
  /sbin/iptables -t nat -A pre_mod -j $1 2> /dev/null
}

del_chain() {
  /sbin/iptables -D in_mod -j $1 2> /dev/null
  /sbin/iptables -F $1 2> /dev/null
  /sbin/iptables -X $1 2> /dev/null
  /sbin/iptables -t nat -D pre_mod -j $1 2> /dev/null
  /sbin/iptables -t nat -F $1 2> /dev/null
  /sbin/iptables -t nat -X $1 2> /dev/null
}

add_rule() {
  [ $3 ] && PORT="--dport $3"
  /sbin/iptables -A $1 -p $2 $PORT -j ACCEPT 2> /dev/null
  /sbin/iptables -t nat -A $1 -p $2 $PORT -j ACCEPT 2> /dev/null
}

MODNAME=packetSplitter

case "$1" in
  start|restart)
  . /opt/$MODNAME/etc/settings
  if [ "$MOD_PSPLITTER_DATASRC" ]; then
    if [ "$MOD_PSPLITTER_DATASRC" == "0" ]; then
      sed -i 's/MOD_PSPLITTER_DATASRC=0/MOD_PSPLITTER_SOURCE1_CONN_ID=0\nMOD_PSPLITTER_SOURCE1_ENABLED=1/' /opt/$MODNAME/etc/settings
    elif [ "$MOD_PSPLITTER_DATASRC" == "1" ]; then
      sed -i 's/MOD_PSPLITTER_DATASRC=1/MOD_PSPLITTER_SOURCE1_CONN_ID=1\nMOD_PSPLITTER_SOURCE1_ENABLED=1/' /opt/$MODNAME/etc/settings
    fi
  fi

  if [ "$1" = "restart" ]; then
      echo -n "Restarting module $MODNAME: "
      killall pSplitterd 2> /dev/null
      del_chain mod_pSplitter 2> /dev/null
  else
      echo -n "Starting module $MODNAME: "
  fi
  if [ "$MOD_PSPLITTER_ENABLED" != "1" ]; then
      echo "skipped"
      exit 0
  fi

  add_chain mod_pSplitter
  if [ "$MOD_PSPLITTER_RCONN1_MODE" == "1" ]; then
    [ "$MOD_PSPLITTER_RCONN1_PROTOCOL" == "0" ] && add_rule mod_pSplitter tcp $MOD_PSPLITTER_RCONN1_PORT
    [ "$MOD_PSPLITTER_RCONN1_PROTOCOL" == "1" ] && add_rule mod_pSplitter udp $MOD_PSPLITTER_RCONN1_PORT
  fi
  if [ "$MOD_PSPLITTER_RCONN2_MODE" == "1" ]; then
    [ "$MOD_PSPLITTER_RCONN2_PROTOCOL" == "0" ] && add_rule mod_pSplitter tcp $MOD_PSPLITTER_RCONN2_PORT
    [ "$MOD_PSPLITTER_RCONN2_PROTOCOL" == "1" ] && add_rule mod_pSplitter udp $MOD_PSPLITTER_RCONN2_PORT
  fi
  if [ "$MOD_PSPLITTER_RCONN3_MODE" == "1" ]; then
    [ "$MOD_PSPLITTER_RCONN3_PROTOCOL" == "0" ] && add_rule mod_pSplitter tcp $MOD_PSPLITTER_RCONN3_PORT
    [ "$MOD_PSPLITTER_RCONN3_PROTOCOL" == "1" ] && add_rule mod_pSplitter udp $MOD_PSPLITTER_RCONN3_PORT
  fi
  if [ "$MOD_PSPLITTER_RCONN4_MODE" == "1" ]; then
    [ "$MOD_PSPLITTER_RCONN4_PROTOCOL" == "0" ] && add_rule mod_pSplitter tcp $MOD_PSPLITTER_RCONN4_PORT
    [ "$MOD_PSPLITTER_RCONN4_PROTOCOL" == "1" ] && add_rule mod_pSplitter udp $MOD_PSPLITTER_RCONN4_PORT
  fi
  if [ "$MOD_PSPLITTER_RCONN5_MODE" == "1" ]; then
    [ "$MOD_PSPLITTER_RCONN5_PROTOCOL" == "0" ] && add_rule mod_pSplitter tcp $MOD_PSPLITTER_RCONN5_PORT
    [ "$MOD_PSPLITTER_RCONN5_PROTOCOL" == "1" ] && add_rule mod_pSplitter udp $MOD_PSPLITTER_RCONN5_PORT
  fi

  rm -rf /var/run/$MODNAME/*
  /opt/$MODNAME/bin/pSplitterd &
  RETVAL=$?
  if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
  exit $RETVAL
  ;;
  stop)
  echo -n "Stopping module $MODNAME: "
  killall pSplitterd 2> /dev/null
  del_chain mod_pSplitter 2> /dev/null
  RETVAL=$?
  if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
  exit $RETVAL
  ;;
  status)
  echo -n "Module $MODNAME is "
  killall -0 pSplitterd 2> /dev/null
  RETVAL=$?
  if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
  exit $RETVAL
  ;;
  defaults)
  cp /opt/$MODNAME/etc/defaults /opt/$MODNAME/etc/settings 2> /dev/null
  ;;
  *)
  echo "Usage: $0 {start|stop|restart|status|defaults}"
  exit 1
esac
